<?php
/*
 * @copyright Copyright (c) 2012-2017 Marin V. , Tykva A. , Kozel R. , Sokolov D.
 * @version 1.0
 * @link http://lecturebox.ru
*/

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    
    protected function _initAutoload() 
    {
        $moduleLoader = new Zend_Application_Module_Autoloader(array( 
            'namespace' => '', 
            'basePath'  => APPLICATION_PATH)); 

        return $moduleLoader;
    }
    
    protected function _initAcl()
    {

        $acl = new Zend_Acl();

        // Создаем роли
        $acl->addRole(new Zend_Acl_Role('guest'))
            ->addRole(new Zend_Acl_Role('student'), 'guest')
            ->addRole(new Zend_Acl_Role('lecturer'), 'student')
            ->addRole(new Zend_Acl_Role('admin'), 'lecturer');

        // Создаем ресурсы; префикс "mvc:" - для ресурсов страниц
        $acl->add(new Zend_Acl_Resource('mvc:index'))
            ->add(new Zend_Acl_Resource('mvc:auth'))
            ->add(new Zend_Acl_Resource('mvc:lectures')) 
            ->add(new Zend_Acl_Resource('mvc:courses'))
            ->add(new Zend_Acl_Resource('mvc:subjects'))
            ->add(new Zend_Acl_Resource('mvc:cron'))
            ->add(new Zend_Acl_Resource('mvc:admin'));

        // Пускаем гостей на index
        $acl->allow('guest', array('mvc:index'),array('index','user', 'popular','locale'));
        $acl->allow('guest','mvc:cron',null);
        $acl->allow('guest', 'mvc:lectures', array('tag','single','cat',
            'index', 'subject','ajaxvideo','ajaxtl','ajaxrait'));
        $acl->allow('guest', 'mvc:courses', 'view');
        //разрешаем гостям авторизацию и регистрацию
        $acl->allow('guest', 'mvc:auth', array('login', 'signup', 'index', 
            'confirm', 'remind'));
        
        // Авторизованым запрещаем авторизацию и регистрацию
        $acl->deny('student', 'mvc:auth', array('login', 'signup', 'index','remind'));
        // Разрешаем пользователям завершать сеанс и редактировать свой профиль
        $acl->allow('student', 'mvc:auth', array('logout','profile'));
        //Разрешаем управление балансом (законное пополнение), покупку, добавл. в избр.
        $acl->allow('student', 'mvc:index', array('favorites'));
        //Разрешаем просмотр лекций
        $acl->allow('student', 'mvc:lectures', array('index', 'single',
            'ajaxrait', 'timeline')); 
        $acl->allow('student', 'mvc:courses', array('subscribe', 'unsubscribe'));
        
        //Разрешаем лекторам добавление и редактирование курсов
        $acl->allow('lecturer', 'mvc:courses', array('index', 'add', 'view',
            'admin', 'edit', 'del'));
        //Разрешаем лекторам загрузку лекций
        $acl->allow('lecturer', 'mvc:lectures', array('add', 'ajax', 'ajaxrait',
            'edit', 'del'));
        
        //администратору:
        //изменение ролей пользователей
        $acl->allow('admin', 'mvc:admin', array('index', 'courses', 'lectures',
            'users', 'deluser', 'subjects', 'changerole', 'blockuser',
            'unblockuser', 'adduser'));
        $acl->allow('admin', 'mvc:subjects', array('index', 'add', 'delete',
            'edit', 'delete'));

        $role = Bootstrap::getRole();

        // Цепляем ACL к Zend_Navigation
        Zend_View_Helper_Navigation_HelperAbstract::setDefaultAcl($acl);
        Zend_View_Helper_Navigation_HelperAbstract::setDefaultRole($role);

        //Сохраняем объект, который также доступен из контроллеров
        //как $this->getFrontController()->getInstance()->getParam('bootstrap')->getResource('Acl');
        Zend_Registry::set('acl', $acl);

        return $acl;
    }

    //???
    public function _initRoute()
    {
        // Получаем маршрут, по-умолчанию
        $router = Zend_Controller_Front::getInstance()->getRouter();

        // Маршрут для профиля пользователя
        $route_pages = new Zend_Controller_Router_Route_Regex(
            'user([0-9]+)-(.*)', //route
            array(//defaults
                'controller' => 'index',
                'action' => 'user',
            ),
            array(1 => 'user',2 => 'username'),
            'user%s-%s'
        );
        $router->addRoute('userProfile', $route_pages);
    }


    protected function _initDoctype()
    {
        $this->bootstrap('view');
        $view = $this->getResource('view');
        //Задаем общую часть тега title для страниц
        $view->headTitle('LectureBox.ru')->setSeparator(' - ');
        $view->headMeta()->appendName('keywords', 'видео лекции онлайн');
		//$view->headMeta()->appendName('description', 'Все лекции в одной коробке');
        $view->headMeta()->appendName('viewport', 'width=device-width, initial-scale=1.0');
        // Добавляем путь для поиска "Помошников Вида"
        $view->addHelperPath(APPLICATION_PATH . '/views/helpers', 'View_Helper');
        
        $view->headScript()->appendFile('/www/bootstrap/js/jquery.js');
        $view->headScript()->appendFile('/www/bootstrap/js/my/jquery.tablesorter.min.js');
        $view->headScript()->appendFile('/www/bootstrap/js/my/jquery.tablesorter.pager.js');
        $view->headScript()->appendFile('/www/bootstrap/js/bootstrap-modal.js');
        // $view->headScript()->appendFile('/www/js/jquery-1.7.1.min.js');        
        // $view->headScript()->appendFile('/www/js/jquery.simplemodal.1.4.3.min.js');
        // $view->headScript()->appendFile('/www/js/dialogs.js');
    }
//    protected function _initSetTranslation() {
//        $this->bootstrapView();
//        $view = $this->getResource('view');        
//        
//        $translate = new Zend_Translate('gettext',APPLICATION_PATH.'/languages/en.mo','en');
//        $translate->addTranslation(APPLICATION_PATH.'/languages/ru.mo','ru');
//              
//        
//        $session = new Zend_Session_Namespace('session');
//        $langLocale = isset($session->lang) ? $session->lang : new Zend_Locale('en_US');
//        Zend_Registry::set('Zend_Locale', new Zend_Locale($langLocale));
//
//        Zend_Registry::set('Zend_Translate', $translate);
//        Zend_Registry::set('Zend_Session_Namespace', $session);
//        
//        $view->translate = $translate;
//      }
    
      protected function _initTranslate()
        {
            
          //$translate = new Zend_Translate('gettext',APPLICATION_PATH.'/languages/en.mo','en');
          //$translate->addTranslation(APPLICATION_PATH.'/languages/ru.mo','ru');
            $session = new Zend_Session_Namespace('lectureBox.l10n');
          if ($session->locale) {
            $locale = new Zend_Locale($session->locale);                 
          } 
          
          if ($locale === null) {
            try {
              $locale = new Zend_Locale('browser');
              $session->locale = $locale;
            } catch (Zend_Locale_Exception $e) {
              $locale = new Zend_Locale('ru_RU');   
              $session->locale = 'ru_RU';			  
            } 
          }

          $registry = Zend_Registry::getInstance();
          $registry->set('Zend_Locale', $locale); 
            $translate = new Zend_Translate('array', APPLICATION_PATH . '/languages/', 
      null, array('scan' => Zend_Translate::LOCALE_FILENAME, 'disableNotices' => 1));
          //$registry = Zend_Registry::getInstance();
          $registry->set('Zend_Translate', $translate); 
          //$view->translate = $translate;
        }
//      protected function _initLocale()
//        {               
//          $session = new Zend_Session_Namespace('lectureBox.l10n');
//          if ($session->locale) {
//            $locale = new Zend_Locale($session->locale);                 
//          } 
//
//          if ($locale === null) {
//            try {
//              $locale = new Zend_Locale('browser'); 
//            } catch (Zend_Locale_Exception $e) {
//              $locale = new Zend_Locale('ru_RU');               
//            } 
//          }
//
//          $registry = Zend_Registry::getInstance();
//          $registry->set('Zend_Locale', $locale); 
//          //print_r($session->locale);
//        }
      
    protected function _initNavigation()
    {
        $this->bootstrapView();
        $view = $this->getResource('view');


        $container = new Zend_Navigation(array(
            
            array(
                'label' => 'Регистрация',
                'controller' => 'auth',
                'action' => 'signup',
                'resource'      => 'mvc:auth',
                'privilege'     => 'signup',
                'route' => 'default'
            ),
            
            array(
                'label' => 'Войти',
                'controller' => 'auth',
                'action' => 'login',
                'resource'      => 'mvc:auth',
                'privilege'     => 'login',
                'route' => 'default'
            ),

//            array(
//                'label' => 'Добавить лекцию',
//                'controller' => 'lectures',
//                'action' => 'add',
//                'resource' => 'mvc:lectures',
//                'privilege' => 'add',
//                'route' => 'default'
//            ),

            array(
                'label' => 'Мои курсы',
                'controller' => 'courses',
                'action' => 'index',
                'resource' => 'mvc:courses',
                'privilege' => 'index',
                'route' => 'default'
            ),
            
            array(
                'label' => 'Профиль',
                'controller' => 'auth',
                'action' => 'profile',
                'resource' => 'mvc:auth',
                'privilege' => 'profile',
                'route' => 'default',
            ),
            
            array(
                'label' => 'Админка',
                'controller'    => 'admin',
                'action' => 'index',
                'resource' => 'mvc:admin',
                'privilege' => 'index',
                'route' => 'default'
            ),
            
            array(
                'label' => 'Выйти',
                'controller'    => 'auth',
                'action' => 'logout',
                'resource' => 'mvc:auth',
                'privilege' => 'logout',
                'route' => 'default'
            )
           
        ));
        
        $view->navigation($container);
        $view->navigation()->menu()->setUlClass('nav'); 
        
        $view->navigation = $container;
        return $container;
    }

    public function run()
    {
        parent::run();
    }

    /*
     * Определяет роль текущего пользователя и роль по переданному id роли
     *
     * @return string
     */
    public static function getRole($roleId=null)
    {
        if($roleId === null)
        {
            $auth = Zend_Auth::getInstance();
            $roleId = ($auth->hasIdentity() && $auth->getIdentity()->role > 0)
                ? $auth->getIdentity()->role : 0;
        }

        $roles = array(
            0 => 'guest',
            1 => 'student',
            2 => 'lecturer',
            3 => 'admin', 
        );

        // Запоминаем соответсвие между id и названиями ролей
        Zend_Registry::set('roles', $roles);
        // Если роль пользователя больше не существует в системе, то он гость
        return isset($roles[$roleId])? $roles[$roleId] : $roles[0];
    }
    
//    protected function _initEmail()
//    {
//            $email_config = array(
//                    'auth' => 'plain',
//                    'username' => 'username',
//                    'password' => 'password',
//                    'ssl' => 'tls',
//                    'port' => 25
//            );
//            $transport = new Zend_Mail_Transport_Smtp('mail.domain.com',
//                    $email_config);
//            Zend_Mail::setDefaultTransport($transport);
//    }	

}

